﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Compras;
using BussinessLogicTecnoPez.Tipos_Comunes;
using Tecnopez.Globals;
using Microsoft.Practices.EnterpriseLibrary.Validation;

public partial class Modules_Compras_ABMOfertasProveedor : System.Web.UI.Page
{

    const String ofertaViewStateOrdenKey = "ordenOferta";
    const String ofertaViewStateOrdenDireccionKey = "ordenDireccionOferta";

    const String detalleOferta = "SESSION_DETALLE_OFERTA_PROVEEDOR";
    const String detalleFactores = "SESSION_FACTORES_OFERTA_PROVEEDOR";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.Page.IsPostBack)
        {
            SetMode(PageMode.ListMode);
            CargarComboProveedor();
        }

        TPPProveedor.ObjType = typeof(Proveedor);
        TPPTipoMoneda.ObjType = typeof(TipoMoneda);
        TPPInsumo.ObjType = typeof(Insumo);
        TPPFactor.ObjType = typeof(Factor);

        InicializarValidadores();
        InicializarGrillas();        

        cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/configurar.gif";
        master.Titulo = "Gestión de Ofertas de Proveedores";
        cargarGrilla();
        _lblError.Text = "";
    }

    private void CargarComboProveedor()
    {
        ddlProveedor.DataTextField = "RazonSocial";
        ddlProveedor.DataValueField = "idProveedor";
        ddlProveedor.DataSource = Proveedor.getManager.GetAll();
        ddlProveedor.DataBind();

        ListItem item = new ListItem("Seleccione...", "-1");
        ddlProveedor.Items.Insert(0, item);
    }

    #region "Grillas"
    private void InicializarGrillas()
    {
        grdOfertasProveedor.setupGrid<OfertaProveedor>(cargarGrilla, seleccionarOfertaProveedor, null, true, this.ViewState);
        grdOfertasProveedor.PageDataViewOrdenKey = ofertaViewStateOrdenKey;
        grdOfertasProveedor.PageDataViewOrdenDireccionKey = ofertaViewStateOrdenDireccionKey;

        grdDetalleOferta.Columns.Clear();
        grdDetalleOferta.AutoGenerateColumns = false;

        BoundField objCol;
        objCol = new BoundField();
        objCol.DataField = "Insumo";
        objCol.HeaderText = "Insumo";
        grdDetalleOferta.Columns.Add(objCol);

        objCol = new BoundField();
        objCol.DataField = "Cantidad";
        objCol.HeaderText = "Cantidad";
        grdDetalleOferta.Columns.Add(objCol);

        objCol = new BoundField();
        objCol.DataField = "Precio";
        objCol.HeaderText = "Precio";
        grdDetalleOferta.Columns.Add(objCol);

        ButtonField objColButton = new ButtonField();
        objColButton.ButtonType = ButtonType.Image;
        objColButton.CommandName = "DeleteRow";
        objColButton.HeaderText = "Quitar";
        objColButton.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/eliminar.gif";
        grdDetalleOferta.Columns.Add(objColButton);

        string[] strKeys = new string[1];
        strKeys[0] = "IdInsumo";
        grdDetalleOferta.DataKeyNames = strKeys;

        grdFactoresOferta.AutoGenerateColumns = false;
        grdFactoresOferta.Columns.Clear();

        objCol = new BoundField();
        objCol.DataField = "Factor";
        objCol.HeaderText = "Factor";
        grdFactoresOferta.Columns.Add(objCol);

        objCol = new BoundField();
        objCol.DataField = "Tipo";
        objCol.HeaderText = "Tipo";
        grdFactoresOferta.Columns.Add(objCol);

        objCol = new BoundField();
        objCol.DataField = "Valor";
        objCol.HeaderText = "Valor";
        grdFactoresOferta.Columns.Add(objCol);

        objColButton = new ButtonField();
        objColButton.ButtonType = ButtonType.Image;
        objColButton.CommandName = "DeleteRow";
        objColButton.HeaderText = "Quitar";
        objColButton.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/eliminar.gif";
        grdFactoresOferta.Columns.Add(objColButton);

        strKeys = new string[1];
        strKeys[0] = "IdFactor";
        grdFactoresOferta.DataKeyNames = strKeys;
    }

    private void seleccionarOfertaProveedor(int o)
    {
        int IdOferta = int.Parse(grdOfertasProveedor.grdDatosAbmView.DataKeys[o].Value.ToString());
        OfertaProveedor.getManager.ClearFilters();
        OfertaProveedor.getManager.AddFilter("IDOFERTA", GenericManager<OfertaProveedor>.filterOperator.Equals, IdOferta);
        OfertaProveedor objOferta = OfertaProveedor.getManager.GetOne();
        txtID.Text = objOferta.IdOferta.ToString();
        TPCFechaCarga.Text = objOferta.FechaCarga.ToShortDateString();
        TPCFechaVencimiento.Text = objOferta.FechaVencimiento.ToShortDateString();
        txtPresupuesto.Text = objOferta.Presupuesto;
        txtObservaciones.Text = objOferta.Observaciones;

        txtTotal.Text = objOferta.Monto.ToString();

        if (objOferta.TipoMoneda != null)
            TPPTipoMoneda.ItemSelected = objOferta.TipoMoneda;
        else
            TPPTipoMoneda.ItemSelected = null;

        if (objOferta.Proveedor != null)
            TPPProveedor.ItemSelected = objOferta.Proveedor;
        else
            TPPProveedor.ItemSelected = null;

        if (objOferta.DetalleOfertaProveedor != null)
            Session[detalleOferta] = objOferta.DetalleOfertaProveedor;
        cargarGrillaDetalle();

        if (objOferta.FactoresOfertaProveedor != null && objOferta.FactoresOfertaProveedor.ItemList.Count > 0)
            Session[detalleFactores] = objOferta.FactoresOfertaProveedor;
        else
            Session[detalleFactores] = null;

        cargarGrillaFactores();

        SetMode(PageMode.ViewMode);
    }

    private void cargarGrilla()
    {
        OfertaProveedor.getManager.ClearFilters();
        OfertaProveedor.getManager.ClearOrders();
        OfertaProveedor.getManager.AddFilter("IdOferta", GenericManager<OfertaProveedor>.filterOperator.Like, "%" + txtBuscarCodigo.Text.Trim() + "%");

        if (ddlProveedor.SelectedValue != "-1")
            OfertaProveedor.getManager.AddFilter("PROVEEDOR", GenericManager<OfertaProveedor>.filterOperator.Equals, ddlProveedor.SelectedValue);
        
        if (ViewState[ofertaViewStateOrdenKey] == null)
            OfertaProveedor.getManager.AddOrder("IdOferta", GenericManager<OfertaProveedor>.Order.orderDirection.DESC);
        else
            OfertaProveedor.getManager.AddOrder(ViewState[ofertaViewStateOrdenKey].ToString(), (GenericManager<OfertaProveedor>.Order.orderDirection)ViewState[ofertaViewStateOrdenDireccionKey]);

        List<OfertaProveedor> lista = new List<OfertaProveedor>();
        lista = OfertaProveedor.getManager.GetFilter();
        grdOfertasProveedor.grdDatosAbmView.DataSource = lista;
        grdOfertasProveedor.grdDatosAbmView.DataBind();
    }

    private void seleccionarItemDetalleOfertaProveedor(int o)
    {
        //int IdItem = int.Parse(grdDetalleOferta.grdDatosAbmView.DataKeys[o].Value.ToString());
        //ver como carajo hago esto!!!
        return;
        //ArrayList detGrilla = (ArrayList)grdDetalleOferta.grdDatosAbmView.DataSource;
        //ItemDetalleOfertaProveedor itemDet = (ItemDetalleOfertaProveedor)detGrilla[o];

        //int IdItem = itemDet.Insumo.IdInsumo;

        //DetalleOfertaProveedor objDetalle = (DetalleOfertaProveedor)Session["detalleOfertaProveedor"];

        //if (objDetalle == null)
        //    return;

        //foreach (ItemDetalleOfertaProveedor item in objDetalle)
        //{
        //    if (item.Insumo.IdInsumo == IdItem)
        //    {
        //        TPPInsumo.ItemSelected = item.Insumo;
        //        txtCantidad.Text = item.Cantidad.ToString();
        //        txtPrecio.Text = item.Precio.ToString();

        //        objDetalle.ItemList.Remove(item);

        //        Session["detalleOfertaProveedor"] = objDetalle;
        //        cargarGrillaDetalle();
        //        return;
        //    }
        //}
    }

    private void cargarGrillaDetalle()
    {
        DetalleOfertaProveedor lista = (DetalleOfertaProveedor)Session[detalleOferta];
        if (lista == null)
            grdDetalleOferta.DataSource = null;
        else
            grdDetalleOferta.DataSource = lista.ItemList;
        grdDetalleOferta.DataBind();
    }

    private void seleccionarFactorOferta(int o)
    {
        //ver como implemento este metodo
        return;
    }

    private void cargarGrillaFactores()
    {
        FactoresOfertaProveedor lista = (FactoresOfertaProveedor)Session[detalleFactores];
        if (lista == null)
            grdFactoresOferta.DataSource = null;
        else
            grdFactoresOferta.DataSource = lista.ItemList;
        grdFactoresOferta.DataBind();
    }
    # endregion    

    #region "Modos"
    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                wzrABM.ActiveStepIndex = 0;
                break;
            case PageMode.NewMode:
                wzrABM.ActiveStepIndex = 1;
                //principal
                txtID.Enabled = false;
                TPCFechaCarga.Enabled = true;
                TPCFechaVencimiento.Enabled = true;
                TPPProveedor.Enable = true;
                TPPInsumo.Enable = true;
                TPPTipoMoneda.Enable = true;
                txtObservaciones.ReadOnly = false;
                txtPresupuesto.ReadOnly = false;
                txtTotal.ReadOnly = true;
                txtCantidad.ReadOnly = false;
                txtPrecio.ReadOnly = false;
                cmdAgregarDetalle.Enabled = true;
                btnAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                grdDetalleOferta.Enabled = true;
                //factores
                TPPFactor.Enable = true;
                txtValor.ReadOnly = false;
                btnAgregar.Enabled = true;
                break;
            case PageMode.EditMode:
                wzrABM.ActiveStepIndex = 1;
                //principal
                txtID.Enabled = false;
                TPCFechaCarga.Enabled = true;
                TPCFechaVencimiento.Enabled = true;
                TPPProveedor.Enable = true;
                TPPInsumo.Enable = true;
                TPPTipoMoneda.Enable = true;
                txtObservaciones.ReadOnly = false;
                txtPresupuesto.ReadOnly = false;
                txtTotal.ReadOnly = true;
                txtCantidad.ReadOnly = false;
                txtPrecio.ReadOnly = false;
                cmdAgregarDetalle.Enabled = true;
                btnAceptar.Visible = true;                
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                grdDetalleOferta.Enabled = true;
                //factores
                TPPFactor.Enable = true;
                txtValor.ReadOnly = false;
                btnAgregar.Enabled = true;
                break;
            case PageMode.ViewMode:
                wzrABM.ActiveStepIndex = 1;
                //principal
                txtID.Enabled = false;
                TPCFechaCarga.Enabled = false;
                TPCFechaVencimiento.Enabled = false;
                TPPProveedor.Enable = false;
                TPPInsumo.Enable = false;
                TPPTipoMoneda.Enable = false;
                txtObservaciones.ReadOnly = true;
                txtPresupuesto.ReadOnly = true;
                txtTotal.ReadOnly = true;
                txtCantidad.ReadOnly = true;
                txtPrecio.ReadOnly = true;
                cmdAgregarDetalle.Enabled = false;
                btnAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;
                grdDetalleOferta.Enabled = false;
                //factores
                TPPFactor.Enable = false;
                txtValor.ReadOnly = true;
                btnAgregar.Enabled = false;
                break;
        }
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }
    #endregion

    #region "Validaciones"
    private void InicializarValidadores()
    {
        PPVProveedor.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.OfertaProveedor";
        PPVProveedor.ControlToValidate = "txtObservaciones";
        PPVProveedor.PropertyName = "Proveedor";
        PPVProveedor.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVFactor.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.FactorOfertaProveedor";
        PPVFactor.ControlToValidate = "txtValor";
        PPVFactor.PropertyName = "Factor";
        PPVFactor.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVInsumo.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.ItemDetalleOfertaProveedor";
        PPVInsumo.ControlToValidate = "txtCantidad";
        PPVInsumo.PropertyName = "Insumo";
        PPVInsumo.DisplayMode = ValidationSummaryDisplayMode.List;
    }
    protected void PPVInsumo_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPInsumo.ItemSelected == null)
            e.ConvertedValue = null;
        else
            e.ConvertedValue = TPPInsumo.ItemSelected.ToString();
    }
    protected void PPVFactor_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPFactor.ItemSelected == null)
            e.ConvertedValue = null;
        else
            e.ConvertedValue = TPPFactor.ItemSelected.ToString();
    }
    protected void PPVProveedor_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPProveedor.ItemSelected == null)
            e.ConvertedValue = null;
        else
            e.ConvertedValue = TPPProveedor.ItemSelected.ToString();
    }
    private bool validar(OfertaProveedor objeto)
    {
        ValidationResults v = Validation.Validate<OfertaProveedor>(objeto);
        if (!v.IsValid)
        {
            _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        if (objeto.FechaCarga > objeto.FechaVencimiento)
        {
            _lblError.Text = "La fecha de vencimiento debe ser superior a la fecha de carga.";
            return false;
        }
        if (objeto.FechaVencimiento < DateTime.Today)
        {
            _lblError.Text = "La fecha de vencimiento debe ser mayor a la fecha actual.";
            return false;
        }
        if (objeto.DetalleOfertaProveedor.ItemList.Count == 0)
        {
            _lblError.Text = "La oferta debe contener al menos un insumo.";
            return false;
        }
        return v.IsValid;
    }

    private bool validarItemDetalle(ItemDetalleOfertaProveedor objeto)
    {
        ValidationResults v = Validation.Validate<ItemDetalleOfertaProveedor>(objeto);
        if (!v.IsValid)
        {
            _lblErrorDetalle.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;
    }

    private bool validarFactor(FactorOfertaProveedor objeto)
    {
        ValidationResults v = Validation.Validate<FactorOfertaProveedor>(objeto);
        if (!v.IsValid)
        {
            _lblErrorFactores.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;
    }
    #endregion

    #region "Eventos"
    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        TPPTipoMoneda.ItemSelected = Functions.getMonedaDefault();
        TPPInsumo.ItemSelected = null;
        TPPProveedor.ItemSelected = null;
        TPPFactor.ItemSelected = null;

        txtID.Text = "";
        txtCantidad.Text = "";
        txtObservaciones.Text = "";
        txtPrecio.Text = "";
        txtPresupuesto.Text = "";
        txtTotal.Text = "0";
        txtValor.Text = "";

        TPCFechaCarga.Text = DateTime.Today.ToShortDateString();
        TPCFechaVencimiento.Text = DateTime.Today.Add(new System.TimeSpan(7, 0, 0, 0)).ToShortDateString();

        LimpiarSession();
        cargarGrillaDetalle();
        cargarGrillaFactores();

        SetMode(PageMode.NewMode);
    }

    private void LimpiarSession()
    {
        Session[detalleOferta] = null;
        Session[detalleFactores] = null;
    }

    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
    }
    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            OfertaProveedor objOferta = new OfertaProveedor();
            objOferta.IdOferta = int.Parse(txtID.Text.Trim());
            if (OfertaProveedor.getManager.Delete(objOferta) < 1)
                throw OfertaProveedor.getManager.GeneratedException;
            SetMode(PageMode.ListMode);
            cargarGrilla();
        }
        catch (BussinessLogicTecnoPezException ex)
        {
            _lblError.Text = ex.Message;
            Functions.LogError(ex);
        }
        catch (Exception ex)
        {
            _lblError.Text = "No se pudo eliminar la oferta.";
            Functions.LogError(ex);
        }
    }
    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        LimpiarSession();
        SetMode(PageMode.ListMode);
    }
    protected void cmdAgregarDetalle_Click(object sender, EventArgs e)
    {
        ItemDetalleOfertaProveedor item = new ItemDetalleOfertaProveedor();
        try
        {
            item.Insumo = (Insumo)TPPInsumo.ItemSelected;
            item.Cantidad = decimal.Parse(txtCantidad.Text.Trim());
            item.Precio = decimal.Parse(txtPrecio.Text.Trim());

            if (validarItemDetalle(item))
            {
                DetalleOfertaProveedor lista = (DetalleOfertaProveedor)Session[detalleOferta];
                if (lista == null)
                    lista = new DetalleOfertaProveedor();
                lista.add(item);
                Session[detalleOferta] = lista;

                CalcularTotal();

                cargarGrillaDetalle();

                TPPInsumo.ItemSelected = null;
                txtCantidad.Text = "";
                txtPrecio.Text = "";

                _lblErrorDetalle.Text = "";
            }            
        }
        catch (BussinessLogicTecnoPezException exc)
        {
            _lblErrorDetalle.Text = exc.Message;
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
        catch (FormatException exc)
        {
            _lblErrorDetalle.Text = exc.Message;
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
        catch (Exception exc)
        {
            _lblErrorDetalle.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
    }

    private void CalcularTotal()
    {
        DetalleOfertaProveedor objDetalle = (DetalleOfertaProveedor)Session[detalleOferta];
        if (objDetalle == null)
        {
            txtTotal.Text = "0";
            return;
        }
        decimal decTotal = 0;
        foreach (ItemDetalleOfertaProveedor objItem in objDetalle)
        {
            decTotal += objItem.Precio;
        }
        txtTotal.Text = decTotal.ToString();
    }

    protected void btnAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            OfertaProveedor objOferta = new OfertaProveedor();
            objOferta.FechaCarga = Convert.ToDateTime(TPCFechaCarga.Text);
            objOferta.FechaVencimiento = Convert.ToDateTime(TPCFechaVencimiento.Text);
            objOferta.Monto = decimal.Parse(txtTotal.Text.Trim());
            objOferta.Observaciones = txtObservaciones.Text;
            objOferta.Presupuesto = txtPresupuesto.Text;

            if (TPPProveedor.ItemSelected != null)
            {
                Proveedor objProveedor = new Proveedor();
                objProveedor = (Proveedor)TPPProveedor.ItemSelected;
                objOferta.Proveedor = objProveedor;
                objProveedor = null;
            }
            if (TPPTipoMoneda.ItemSelected != null)
            {
                TipoMoneda objMoneda = new TipoMoneda();
                objMoneda = (TipoMoneda)TPPTipoMoneda.ItemSelected;
                objOferta.TipoMoneda = objMoneda;
                objMoneda = null;
            }

            objOferta.DetalleOfertaProveedor = (DetalleOfertaProveedor)Session[detalleOferta];
            objOferta.FactoresOfertaProveedor = (FactoresOfertaProveedor)Session[detalleFactores];

            if (validar(objOferta))
            {
                if (getMode() == PageMode.NewMode)
                {
                    if (OfertaProveedor.getManager.Insert(objOferta) != true)
                    {
                        throw OfertaProveedor.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ListMode);
                    cargarGrilla();
                    LimpiarSession();
                }
                else
                {
                    objOferta.IdOferta = int.Parse(txtID.Text.Trim());
                    if (OfertaProveedor.getManager.Update(objOferta) != true)
                    {
                        throw OfertaProveedor.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ViewMode);
                }
                _lblError.Text = "";
                _lblErrorDetalle.Text = "";
            }            
        }
        catch (FormatException exc)
        {
            _lblError.Text = "Error en los tipos de datos.";
            Functions.LogError(exc);
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación.";
            Functions.LogError(exc);
        }
    }
    
    protected void btnFactores_Click(object sender, EventArgs e)
    {
        wzrABM.ActiveStepIndex = 2;
    }
    protected void btnOferta_Click(object sender, EventArgs e)
    {
        wzrABM.ActiveStepIndex = 1;
    }
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        FactorOfertaProveedor item = new FactorOfertaProveedor();
        try
        {
            item.Factor = (Factor)TPPFactor.ItemSelected;
            item.Valor = decimal.Parse(txtValor.Text.Trim());

            if (validarFactor(item))
            {
                FactoresOfertaProveedor lista = (FactoresOfertaProveedor)Session[detalleFactores];
                if (lista == null)
                    lista = new FactoresOfertaProveedor();
                lista.add(item);
                Session[detalleFactores] = lista;

                cargarGrillaFactores();

                TPPFactor.ItemSelected = null;
                txtValor.Text = "";

                _lblErrorFactores.Text = "";
            }            
        }
        catch (BussinessLogicTecnoPezException exc)
        {
            _lblErrorFactores.Text = exc.Message;
            Functions.LogError(exc);
            //SetMode(PageMode.NewMode);
        }
        catch (FormatException exc)
        {
            _lblErrorFactores.Text = exc.Message;
            Functions.LogError(exc);
            //SetMode(PageMode.NewMode);
        }
        catch (Exception exc)
        {
            _lblErrorFactores.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            //SetMode(PageMode.NewMode);
        }
    }
    #endregion
    protected void grdDetalleOferta_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "DeleteRow")
        {
            DetalleOfertaProveedor objDetalle = (DetalleOfertaProveedor)Session[detalleOferta];
            DetalleOfertaProveedor objNewDetalle = new DetalleOfertaProveedor();
            try
            {
                if (objDetalle == null)
                    return;

                foreach (ItemDetalleOfertaProveedor objItem in objDetalle.ItemList)
                {
                    if (objItem.IdInsumo != int.Parse(grdDetalleOferta.DataKeys[int.Parse(e.CommandArgument.ToString())].Value.ToString()))
                    {
                        objNewDetalle.add(objItem);
                    }
                }
                Session[detalleOferta] = objNewDetalle;
            }
            catch (Exception ex)
            {
                _lblErrorDetalle.Text = ex.Message;
            }
            finally
            {
                cargarGrillaDetalle();
                CalcularTotal();
            }
        }
    }
    protected void grdFactoresOferta_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "DeleteRow")
        {
            FactoresOfertaProveedor objDetalle = (FactoresOfertaProveedor)Session[detalleFactores];
            FactoresOfertaProveedor objNewDetalle = new FactoresOfertaProveedor();
            try
            {
                if (objDetalle == null)
                    return;

                foreach (FactorOfertaProveedor objItem in objDetalle.ItemList)
                {
                    if (objItem.Factor.IdFactor != int.Parse(grdFactoresOferta.DataKeys[int.Parse(e.CommandArgument.ToString())].Value.ToString()))
                    {
                        objNewDetalle.add(objItem);
                    }
                }
                Session[detalleFactores] = objNewDetalle;
            }
            catch (Exception ex)
            {
                _lblErrorDetalle.Text = ex.Message;
            }
            finally
            {
                cargarGrillaFactores();
            }
        }
    }
}
